<?php
/**
 * Subpacote de componentes
 *
 * @author esales
 * @version 0.1
 * @copyright opensource.
 * @license http://creativecommons.org/licenses/by/3.0/
 * @link http://esales.com.br
 * @category framework
 * @package componentes
 * @subpackage objMontaGrid
 *
 *
 */
namespace bibliotecas\componentes\grid\funcoes
	{
		/**
		 * classe abstrata onde contem os metodos para montagem
		 * do grid
		 *
		 * @abstract objMontaGrid
		 *
		 */
		abstract class objMontaGrid
			{
				/**
				 * metodo utilizado para montar a grid conforme os
				 * parametros recebidos
				 *
				 * @access protected
				 * @param array $parDados
				 * @return array
				 *
				 */
				protected function mtdMontaGrid($parDados)
					{
						if (empty($this->proErros))
							{
								$this->proDadosGrid['parNavegacao']['parEditarDados'] = $this->proDadosGrid['parEditarDados'];
								$this->proDadosGrid['parNavegacao']['parBuscarDados'] = $this->proDadosGrid['parBuscarDados'];
								$this->proDadosGrid['parNavegacao']['parInserirDados'] = $this->proDadosGrid['parInserirDados'];
								$this->proDadosGrid['parNavegacao']['parBotoes'] = $this->proDadosGrid['parBotoes'];
								$this->proDadosGrid['parNavegacao']['parSubLinha'] = $this->proDadosGrid['parSubLinha'];
								$this->proDadosGrid['parNavegacao']['parFormatacao'] = $this->proDadosGrid['parFormatacao'];
								$this->proDadosGrid['parNavegacao']['parColunasNomes'] = $this->proDadosGrid['parColunasNomes'];
								$this->proDadosGrid['parSubLinhaTamanho'] = empty($this->proDadosGrid['parSubLinha']) ? 0 : 30;
								$this->proDadosGrid['parNavegacaoHtml'] = $this->mtdMontaGridNavegacao($this->proDadosGrid);
								$this->proDadosGrid['parColunas'] = $this->mtdMontaGridColunasTamanho($this->proDadosGrid);
								$this->proDadosGrid['parColunas']['parRegistros'] = $this->mtdMontaGridColunas($this->proDadosGrid);
								$this->proDadosGrid['parLinhasRegistros'] = $this->mtdMontaGridLinhasRegistros($this->proDadosGrid);
								$this->proDadosGrid['parBotoes'] = $this->mtdMontaGridBotoes($this->proDadosGrid);

								$parDados['parDivLarguraTotal'] = $parDados['parFormatacao']['parDimensao'][0] . $parDados['parFormatacao']['parProporcao'][0];
								$parDados['parDivAlturaTotal'] = $parDados['parFormatacao']['parDimensao'][1] . 'px';
								$parDados['parDivAlturaTotalOpcoesRegistros'] = ($parDados['parFormatacao']['parDimensao'][1] - 26) . 'px';
								$parDados['parDivLarguraRegistros'] = $this->proDadosGrid['parColunas']['parTamanhoTotal'] . 'px';
								$parDados['parDivAlturaRegistros'] = ($parDados['parFormatacao']['parDimensao'][1] - 52) . 'px';
								$parDados['parDivAlturaRegistrosB'] = ($parDados['parFormatacao']['parDimensao'][1] - 68) . 'px';
								$parDados['parDivLarguraColunasTotal'] = $this->proDadosGrid['parColunas']['parTamanhoTotal'] . $parDados['parFormatacao']['parProporcao'][0];
								$parDados['html'] = "<!--grid--><div id=\"grid\"><div class=\"gridPrincipal-1\" style=\"width: " . $parDados['parDivLarguraTotal'] . "; height: " . $parDados['parDivAlturaTotal'] . "; float: " . $parDados['parFormatacao']['parOrientacao'][0] . ";\"><!-- titulo --><div id=\"\" class=\"gridPrincipal-1-1\" style=\"width: " . $parDados['parDivLarguraTotal'] . ";\"><span class=\"fonteGrid-3\">titulo do grid</span></div><!-- opcoes e registros --><div id=\"1\" class=\"gridPrincipal-1-2\" style=\"width: " . $parDados['parDivLarguraTotal'] . "; height: " . $parDados['parDivAlturaTotalOpcoesRegistros'] . ";\"><div id=\"1\" class=\"gridPrincipal-1-2-1\" style=\"width: " . $parDados['parDivLarguraTotal'] . ";\">" . $this->proDadosGrid['parBotoes'] . "<!-- navegacao -->" . $this->proDadosGrid['parNavegacaoHtml'] . "</div><!-- registros (largura total das colunas)--><div id=\"\" class=\"gridPrincipal-1-2-2\" style=\"width: 100%; height: " . $parDados['parDivAlturaRegistros'] . ";\"><div id=\"\" class=\"gridPrincipal-1-2-2-1\" style=\"width: " . $parDados['parDivLarguraRegistros'] . "; height: " . $parDados['parDivAlturaRegistrosB'] . ";\"><!-- registros colunas --><div id=\"gridColunaId\" class=\"gridPrincipal-1-2-2-1-1\" style=\"width: " . $parDados['parDivLarguraRegistros'] . ";\"><!-- loop dos nomes das colunas -->" . $this->proDadosGrid['parColunas']['parRegistros'] . "</div><!-- registro linhas --><div id=\"\" class=\"gridPrincipal-1-2-2-1-2\" style=\"width: " . $parDados['parDivLarguraRegistros'] . "; height: auto;\">" . $this->proDadosGrid['parLinhasRegistros'] . "</div></div></div></div></div><!-- tela escura --><div id=\"gridDivEscuraId\" class=\"gridDivEscura-1\" style=\"display: none;\" onclick=\"mtdGridOcultaDiv(event, ['gridDivBuscaId', 'gridDivEditaId']);\"></div><!-- tela de carregamento --><div id=\"gridDivCarregadorId\" class=\"gridDivCarregador-1\" style=\"display: none;\"></div><!-- tela de busca --><div id=\"gridDivBuscaId\" class=\"gridDivBusca-1\" style=\"display: none;\"></div><!-- tela de edicao --><div id=\"gridDivEditaId\" class=\"gridDivEdita-1\" style=\"display: none;\"></div><div id=\"gridJsonDados\" style=\"display: none;\">" . htmlspecialchars(json_encode($this->proDadosGrid['parNavegacao'])) . "</div></div>";
							}
						return empty($parDados['html']) ? null : $parDados['html'];
					}
				/**
				 *
				 * Enter description here ...
				 * @param unknown_type $parDados
				 */
				private function mtdMontaGridNavegacao($parDados)
					{
						$parDados['b2'] = count($parDados['parNavegacao']['parLinhasRegistros']);
						$parDados['b1'] = "<div id=\"\" class=\"gridPrincipal-1-2-1-2\"><div id=\"gridDivNavPrimeiroId\" onclick=\"mtdGridNavegar(event, ['gridNavPrimeiro', 'gridJsonDados']);\" class=\"gridPrincipal-1-2-1-2-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Gnome-Go-First-32.png\"></div><div id=\"gridDivNavAnteriorId\" onclick=\"mtdGridNavegar(event, ['gridNavAnterior', 'gridJsonDados']);\" class=\"gridPrincipal-1-2-1-2-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Gnome-Go-Previous-32.png\"></div><div class=\"gridPrincipal-1-2-1-2-1\"><span class=\"fonteGrid-1\">página</span></div><div id=\"\" class=\"gridPrincipal-1-2-1-2-1\"><input id=\"\" name=\"paginaAtual\" type=\"text\" value=\"" . $parDados['parNavegacao']['parPagina'] . "\"></div><div id=\"\" class=\"gridPrincipal-1-2-1-2-1\"><span class=\"fonteGrid-1\">de " . ceil($parDados['parNavegacao']['parTotal'] / $parDados['parNavegacao']['parLimite']) . "</span></div><div id=\"gridDivNavProximoId\" onclick=\"mtdGridNavegar(event, ['gridNavProximo', 'gridJsonDados']);\" class=\"gridPrincipal-1-2-1-2-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Gnome-Go-Next-32.png\"></div><div id=\"gridDivNavUltimoId\" onclick=\"mtdGridNavegar(event, ['gridNavUltimo', 'gridJsonDados']);\" class=\"gridPrincipal-1-2-1-2-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Gnome-Go-Last-32.png\"></div></div><div id=\"\" class=\"gridPrincipal-1-2-1-2\"><div id=\"\" class=\"gridPrincipal-1-2-1-2-1\"><span class=\"fonteGrid-1\">listando " . (($parDados['parNavegacao']['parLimite'] > $parDados['parNavegacao']['parTotal']) ? $parDados['parNavegacao']['parTotal'] : $parDados['parNavegacao']['parLimite']) . " de " . $parDados['parNavegacao']['parTotal'] . " registros encontrados</span></div></div>";
						return $parDados['b1'];
					}
				/**
				 *
				 * @param unknown_type $parDados
				 */
				private function mtdMontaGridLinhasRegistros($parDados)
					{
						$parDados['lr6'] = 1;
						$parDados['lr10'] = 0;
						$parDados['lr4'] = $this->proDadosGrid['parColunas']['parTamanhoTotal'];
						$parDados['lr13'] = ($this->proDadosGrid['parColunas']['parTamanhoTotal'] - 11);
						$parDados['lr5'] = $this->proDadosGrid['parColunas']['parTamanho'];
						$parDados['lr8'] = "<input type=\"hidden\" id=\"gridControleSelecionaDiv\" value=\"\" name=\"gridControleSelecionaDiv\">";
						$parDados['lr8'] .= "<input type=\"hidden\" id=\"gridJsonParInserirDados\" name=\"gridJsonParInserirDados\" value=\"" . htmlspecialchars(json_encode($parDados['parInserirDados'])) . "\">";
						$parDados['lr8'] .= "<input type=\"hidden\" id=\"gridJsonParBuscarDados\" name=\"gridJsonParBuscarDados\" value=\"" . htmlspecialchars(json_encode($parDados['parBuscarDados'])) . "\">";
						$parDados['lr8'] .= "<input type=\"hidden\" id=\"gridJsonParEditarDados\" name=\"gridJsonParEditarDados\" value=\"" . htmlspecialchars(json_encode($parDados['parEditarDados'])) . "\">";
						foreach ($parDados['parLinhasRegistros'] as $parDados['lr1'])
							{
								$parDados['lr7'] = $parDados['lr6'] % 2 == 0 ? 'rgb(245,245,245)' : 'rgb(255, 255, 255)';
								$parDados['lr11'] = empty($parDados['parSubLinha']) ? '' : "<div onclick=\"mtdGridSubLinha(event, ['gridDivSubLinhaBotaoId" . $parDados['lr6'] . "', 'gridDivSubLinhaId" . $parDados['lr6'] . "', '" . ($parDados['lr6'] % 2) . "']);\" id=\"gridDivSubLinhaBotaoId" . $parDados['lr6'] . "\" class=\"gridPrincipal-1-2-2-1-2-1-2\" style=\"width: " . $this->proDadosGrid['parSubLinhaTamanho'] . "px; border-right: 1px solid " . $parDados['parFormatacao']['parCorBorda'][0] . ";\"><span class=\"fonteGrid-1\">+</span></div>";
								$parDados['lr12'] = empty($parDados['parSubLinha']) ? '' : "<div id=\"gridDivSubLinhaId" . $parDados['lr6'] . "\" class=\"gridPrincipal-1-2-2-1-2-2\" style=\"width: " . $parDados['lr13'] . "px; display: none;\">********</div>";
								$parDados['lr8'] .= "<div onclick=\"mtdGridSelecionaDiv(event, ['gridDivLinhaBuscaId" . $parDados['lr6'] . "', '" . ($parDados['lr6'] % 2) . "', 'gridControleSelecionaDiv', '" . htmlspecialchars(json_encode($this->proDadosGrid['parLinhasRegistrosTotal'][$parDados['lr10']])) . "', '" . htmlspecialchars(json_encode($parDados['parEditarDados'])) . "']);\" id=\"gridDivLinhaBuscaId" . $parDados['lr6'] . "\" class=\"gridPrincipal-1-2-2-1-2-1\" style=\"width: " . $parDados['lr4'] . "px; background-color: " . $parDados['lr7'] . ";\">";
								$parDados['lr8'] .= $parDados['lr11'];
								foreach ($parDados['lr1'] as $parDados['lr2'])
									{
										$parDados['lr8'] .= "<div id=\"\" ondblclick=\"mtdGridEditar(event, ['gridDivEditaId', 'gridDivEscuraId', '" . htmlspecialchars(json_encode($this->proDadosGrid['parLinhasRegistrosTotal'][$parDados['lr10']])) . "', '" . htmlspecialchars(json_encode($parDados['parEditarDados'])) . "']);\" class=\"gridPrincipal-1-2-2-1-2-1-1\" style=\"width: " . $parDados['lr5'] . "px; border-right: 1px solid " . $parDados['parFormatacao']['parCorBorda'][0] . ";\"><span class=\"fonteGrid-1\">" . $parDados['lr2'] . "</span></div>";
									}
								$parDados['lr8'] .= "</div>" . $parDados['lr12'];
								$parDados['lr6'] += 1;
								$parDados['lr10'] += 1;
								if ($parDados['lr10'] == $parDados['parNavegacao']['parLimite'])
									{
										break;
									}
							}
						return $parDados['lr8'];
					}
				/**
				 *
				 * @param unknown_type $parDados
				 */
				private function mtdMontaGridColunas($parDados)
					{
						$parDados['c1'] = mt_rand();
						$parDados['c3'] = null;
						$parDados['c3'] .= empty($parDados['parSubLinha']) ? '' : "<div id=\"\" class=\"gridPrincipal-1-2-2-1-1-1\" style=\"width: " . $this->proDadosGrid['parSubLinhaTamanho'] . "px; padding: 2px; border-right: 1px solid " . $parDados['parFormatacao']['parCorBorda'][0] . "; background-color: " . $parDados['parFormatacao']['parCorNomeColuna'][0] . ";\"><span class=\"fonteGrid-2\"></span></div>";
						foreach ($parDados['parColunasNomes'] as $parDados['c2'] => $parDados['c4'])
							{
								$parDados['c3'] .= "<div id=\"\" class=\"gridPrincipal-1-2-2-1-1-1\" style=\"width: " . $this->proDadosGrid['parColunas']['parTamanho'] . "px; border-right: 1px solid " . $parDados['parFormatacao']['parCorBorda'][0] . "; background-color: " . $parDados['parFormatacao']['parCorNomeColuna'][0] . ";\"><span class=\"fonteGrid-2\">" . $parDados['c2'] . "</span></div>";
							}
						return $parDados['c3'];
					}
				/**
				 * metodo para calcular o tamanho das colunas e tambem o tamanho total
				 * das linhas.
				 * @param unknown_type $parDados
				 */
				private function mtdMontaGridColunasTamanho($parDados)
					{
						$parDados['ct8'] = 0;
						$parDados['ct9'] = 0;
						$parDados['ct10'] = 0;
						foreach ($parDados['parLinhasRegistros'] as $parDados['ct1'])
							{
								if ($parDados['ct8'] == $parDados['parNavegacao']['parLimite'])
									{
										break;
									}
								foreach ($parDados['ct1'] as $parDados['ct2'])
									{
										$parDados['ct9'] += strlen($parDados['ct2']);
										$parDados['ct10'] += 1;
									}
								$parDados['ct8'] += 1;
							}
						foreach ($parDados['parColunasNomes'] as $parDados['ct3'] => $parDados['ct7'])
							{
								$parDados['ct9'] += strlen($parDados['ct7']);
								$parDados['ct10'] += 1;
							}
						$parDados['ct10'] = ceil($parDados['ct9'] / $parDados['ct10']);
						$parDados['ct10'] *= 7;
						return array('parTamanho' => $parDados['ct10'], 'parTamanhoTotal' => ((count($parDados['parColunasNomes']) * ($parDados['ct10'] + 9)) + ($this->proDadosGrid['parSubLinhaTamanho'] + ($this->proDadosGrid['parSubLinhaTamanho'] == 0 ? 0 : 5))));
					}
				/**
				 * Enter description here ...
				 * @param unknown_type $parDados
				 */
				private function mtdMontaGridBotoes($parDados)
					{
						$parDados['b3'] = null;
						$parDados['b5'] = 0;
						foreach ($parDados['parBotoes'] as $parDados['b1'] => $parDados['b2'])
							{
								switch ($parDados['b2']['parTipo'])
									{
										case 'atualizar':
											$parDados['b3'] .= "<div id=\"gridDivBotoes" . $parDados['b5'] . "\" onclick=\"mtdGridAtualizar(event, 'gridJsonDados');\" class=\"gridPrincipal-1-2-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Gnome-View-Refresh-32.png\"></div></div></div>";
											break;
										case 'editar':
											$parDados['b3'] .= "<div id=\"gridDivBotoes" . $parDados['b5'] . "\" onclick=\"mtdGridEditar(event, ['gridDivEditaId', 'gridDivEscuraId', '', '', 'gridControleSelecionaDiv', '" . $this->proDadosGrid['parNavegacao']['parLimite'] . "', '" . $this->proDadosGrid['parNavegacao']['parPagina'] . "', '" . $parDados['parNavegacao']['parTotal'] . "']);\" class=\"gridPrincipal-1-2-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Edit-32-2.png\"></div></div></div>";
											break;
										case 'inserir':
											$parDados['b3'] .= "<div id=\"gridDivBotoes" . $parDados['b5'] . "\" onclick=\"mtdGridInserir(event, ['gridDivEditaId', 'gridDivEscuraId', 'gridJsonParInserirDados', '" . $this->proDadosGrid['parNavegacao']['parLimite'] . "', '" . $this->proDadosGrid['parNavegacao']['parPagina'] . "', '" . $parDados['parNavegacao']['parTotal'] . "']);\" class=\"gridPrincipal-1-2-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Add%20Button-32.png\"></div></div></div>";
											break;
										case 'remover':
											$parDados['b3'] .= "<div id=\"gridDivBotoes" . $parDados['b5'] . "\" onclick=\"mtdGridRemover(event, ['gridDivBotoes" . $parDados['b5'] . "', 'gridControleSelecionaDiv']);\" class=\"gridPrincipal-1-2-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Close-32.png\"></div></div></div>";
											break;
										case 'buscar':
											$parDados['b3'] .= "<div id=\"gridDivBotoes" . $parDados['b5'] . "\" onclick=\"mtdGridBuscar(event, ['gridDivEditaId', 'gridDivEscuraId', 'gridJsonParBuscarDados', '" . $this->proDadosGrid['parNavegacao']['parLimite'] . "', '" . $this->proDadosGrid['parNavegacao']['parPagina'] . "', '" . $parDados['parNavegacao']['parTotal'] . "']);\" class=\"gridPrincipal-1-2-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1\"><div id=\"\" class=\"gridPrincipal-1-2-1-1-1-1\"><img src=\"" . DOMINIO_BACKEND . "publico/imagens/icones/Find-32.png\"></div></div></div>";
											break;
									}
								$parDados['b5'] += 1;
							}
						return $parDados['b3'];
					}
			}
	}
?>